package org.ns.framework.webmvc;

import java.util.HashMap;
import java.util.Map;

import org.ns.basics.commons.lang.StringUtils;
import org.ns.framework.webmvc.ResponseEntityKey.DefaultResponseEntityKey;

import com.alibaba.fastjson.serializer.ValueFilter;

public interface ResponseEntityResultAdapter {

	public static final String KEY = "ResponseEntityResultAdapter";

	Map<String, Object> toMap(ResponseEntity responseEntity);
	
	default ValueFilter valueFormat(ResponseEntity responseEntity) {
		return responseEntity.getEntityKey().valueformat();
	}

	public static final DefaultResponseEntityResultAdapter defaultInstance = new DefaultResponseEntityResultAdapter();

	public static class DefaultResponseEntityResultAdapter implements ResponseEntityResultAdapter {

		@Override
		public Map<String, Object> toMap(ResponseEntity responseEntity) {
			ResponseEntityKey entityKey = responseEntity.getEntityKey();
			if (entityKey == null) {
				entityKey = DefaultResponseEntityKey.defaultInstance;
			}
			Map<String, Object> responseWrapper = new HashMap<>();
			if (entityKey.existRequestIdName() && StringUtils.isNotBlank(responseEntity.getRequestId())) {
				responseWrapper.put(entityKey.getRequestIdName(), responseEntity.getRequestId());
			}
			if (entityKey.existStatusName() && responseEntity.getStatus() != null) {
				responseWrapper.put(entityKey.getStatusName(), responseEntity.getStatus());
			}
			if (entityKey.existStateName() && StringUtils.isNotBlank(responseEntity.getState())) {
				responseWrapper.put(entityKey.getStateName(), responseEntity.getState());
			}
			if (entityKey.existContentName() && responseEntity.getContent() != null) {
				responseWrapper.put(entityKey.getContentName(), responseEntity.getContent());
			}
			if (entityKey.existMessageName() && responseEntity.getMessage() != null) {
				responseWrapper.put(entityKey.getMessageName(), responseEntity.getMessage());
			}
			if (entityKey.existErrplaceName() && StringUtils.isNotBlank(responseEntity.getErrplace())) {
				responseWrapper.put(entityKey.getErrplaceName(), responseEntity.getErrplace());
			}
			if (entityKey.existLocaleMessageName() && StringUtils.isNotBlank(responseEntity.getLocaleMessage())) {
				responseWrapper.put(entityKey.getLocaleMessageName(), responseEntity.getLocaleMessage());
			}
			return responseWrapper;
		}

	}

}
